﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaFamiliarViewModel
    {
        public event EditarEntidad EditarEntidad;

        private RelayCommand buscarFamiliarAlumnoCommand;
        private RelayCommand editarFamiliarAlumnoCommand;
        private RelayCommand eliminarFamiliarAlumnoCommand;
       
        private string dni;
        private string nombre;
        private string apellido;
        private Guid idSeleccionado;

        public string Dni
        {
            get { return dni; }
            set { dni = value; }

        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }

        }

        public string Apellido
        {
            get { return apellido; }
            set { apellido = value; }
        }

        public ICommand BuscarFamiliarAlumnoCommand
        {
            get
            {
                return buscarFamiliarAlumnoCommand;
            }
        }

        public ICommand EditarFamiliarAlumnoCommand
        {
            get
            {
                return editarFamiliarAlumnoCommand;
            }
        }


        public ICommand EliminarFamiliarAlumnoCommand
        {
            get
            {
                return eliminarFamiliarAlumnoCommand;
            }
        }

        public List<ViewEntity> ListaFamiliares { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }
        }

        private VentanaBusquedaFamiliar view;


        public VentanaBusquedaFamiliarViewModel() { }

        public VentanaBusquedaFamiliarViewModel(VentanaBusquedaFamiliar vista)
        {
            this.view = vista;
            this.buscarFamiliarAlumnoCommand = new RelayCommand(BuscarFamiliarAlumno);
            this.editarFamiliarAlumnoCommand = new RelayCommand(EditarFamiliarAlumno);

        }

        public VentanaBusquedaFamiliarViewModel(VentanaBusquedaFamiliar vista, string eliminar)
        {
            this.view = vista;
            this.buscarFamiliarAlumnoCommand = new RelayCommand(BuscarFamiliarAlumno);
            this.eliminarFamiliarAlumnoCommand = new RelayCommand(EliminarFamiliarAlumno);
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.titulo.Content = "Eliminar Familiar";

        }


        private void BuscarFamiliarAlumno(Object parameter)
        {

            ListaFamiliares = new FamiliarAlumnoLogica().ObtenerEntidadesAEditar(this.dni, this.nombre, this.apellido);

            if (ListaFamiliares != null && ListaFamiliares.Count > 0)
            {
                this.view.listaDatos.ItemsSource = ListaFamiliares;
                this.view.panelResultados.Visibility = Visibility.Visible;
                this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;
            }
            else
            {
                this.view.panelResultados.Visibility = Visibility.Collapsed;
                this.view.lblNoRecords.Visibility = Visibility.Visible;

            }



        }

        private void EditarFamiliarAlumno(Object parameter)
        {
            if (this.idSeleccionado != Guid.Empty)
            {
                this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;

                Familiar entidad = new FamiliarAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado);
                this.EditarEntidad(CasosDeUso.NuevoFamiliarAlumno, entidad);
                this.view.Close();

            }
            else
            {
                this.view.lblRecordNoSelected.Visibility = Visibility.Visible;
            }

        }

        private void EliminarFamiliarAlumno(Object parameter)
        {
            if (this.idSeleccionado != Guid.Empty)
            {
                if (MessageBox.Show("¿Está seguro que desea eliminar los datos del familiar seleccionado?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                {

                    this.view.lblRecordNoSelected.Visibility = Visibility.Collapsed;

                    Familiar entidad = new FamiliarAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado);

                    if (!new FamiliarAlumnoLogica().ExistenRelaciones(entidad.LegajoFamiliar))
                    {
                        entidad.Eliminado = true;
                        new FamiliarAlumnoLogica().Modificar(entidad);

                        VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "El familiar seleccionado ha sido eliminado");
                        nueva.ShowDialog();

                        this.view.Close();
                    }
                    else
                    {
                        VentanaAviso nueva = new VentanaAviso(true, "Ha ocurrido un error", "No es posible eliminar un familiar que esté relacionado con algún alumno");
                        nueva.ShowDialog();

                    }
                }
                
            }
            else
            {
                this.view.lblRecordNoSelected.Visibility = Visibility.Visible;
            }

        }







    }
}
